/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#include "../import/head.h"
#include "../impl/head.h"
#include "stack.h"
#include "task.h"

namespace xos_http
{
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    static stack::ITEM_DATA xos_item_data;

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

    stack::stack()
    {
        init_data();
    }

    stack::~stack()
    {
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // public method

    int stack::get_xos_item_data( ITEM_DATA*& item_ptr )
    {
        int ret = 0;
        xos_item_data.set_container( mgr::container() );
        item_ptr = &xos_item_data;
        return ret;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int stack::push( task * pTask )
    {
        int ret = 0;
        {
            m_uri_list_iter = pTask->m_uri_list_iter;
            m_uri_list.swap( pTask->m_uri_list );
            m_pServlet = pTask->m_pServlet;
            m_pModule = pTask->m_pModule;
            m_nTaskState = pTask->m_eState;
            m_pTask = pTask;
        }
        {
            pTask->reset_uri_iters();
            pTask->m_eState = task::STATE_PREPARE;
            pTask->m_pServlet = 0;
            pTask->m_pModule = 0;
        }
        return ret;
    }

    int stack::pop()
    {
        int ret = 0; 
        m_pTask->m_uri_list_iter = m_uri_list_iter;
        m_pTask->m_uri_list.swap( m_uri_list );
        m_pTask->m_eState = (task::enumState)m_nTaskState;
        m_pTask->m_pServlet = m_pServlet;
        m_pTask->m_pModule = m_pModule;
        return ret;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int stack::init_data()
    {
        int ret = 0;
        m_uri_list_iter = m_uri_list.end();
        m_pServlet = 0;
        m_pModule = 0;
        m_pTask = 0;
        m_nTaskState = 0;
        return ret;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int stack::init()
    {
        int ret = 0;
        return ret;
    }

    int stack::term()
    {
        int ret = 0;
        m_uri_list.clear();
        init_data();
        return ret;
    }


} // xos_http
